package CH9;

import javax.swing.*;
import java.awt.*;

/**
 * @author: LiuBoTao
 * @date: 2022/10/13
 * @ApiNote
 */
public class GuiDemo2 {
    public static void main(String[] args) {
        JFrame f=new JFrame("Liubotao");
        f.setBounds(100,90,500,400);
        f.setResizable(false);//设置窗口是否可调整大小
        f.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);//设置窗体行为：用户单击关闭按钮时，窗体关闭了

        GridBagLayout gridBag = new GridBagLayout();    // 布局管理器
        f.setLayout(gridBag);

        GridBagConstraints gbc=new GridBagConstraints();//布局管理其约束，格式约束
        gbc.fill = GridBagConstraints.HORIZONTAL;//让组件在横向上填充整个网格，默认是取组件默认大小
        gbc.insets=new Insets(10,5,10,5);

        JLabel labelUser=new JLabel("用户名：");
        f.add(labelUser);

        JTextField textUser=new JTextField("aaaaaa");
        textUser.setText("奥斯卡冷冻机房看拉时代峻峰辣椒水两地分居拉伸了");
        System.out.println(textUser.getText());
        f.add(textUser);

        JLabel labelPWD=new JLabel("密码：");
        f.add(labelPWD);

        JPasswordField textPwd=new JPasswordField("bbb");
        textPwd.setEchoChar('*');
        System.out.println(textPwd.getText());
        System.out.println(textPwd.getPassword());
        f.add(textPwd);

        JLabel labelSexy=new JLabel("性别：");
        f.add(labelSexy);

        JComboBox comboBoxSexy=new JComboBox();
        comboBoxSexy.addItem("男");//0--->1
        comboBoxSexy.addItem("女");//1--->2
        comboBoxSexy.insertItemAt("保密",0);//0
        comboBoxSexy.setSelectedItem("女");/**/
        comboBoxSexy.setSelectedIndex(0);/**/
        f.add(comboBoxSexy);

        JLabel labelRole=new JLabel("身份：");
        f.add(labelRole);

        JRadioButton rBtnT=new JRadioButton("老师");
        f.add(rBtnT);

        JRadioButton rBtnS=new JRadioButton("学生");
        f.add(rBtnS);

        JLabel labelInterest=new JLabel("兴趣：");
        f.add(labelInterest);
        JCheckBox cbSing = new JCheckBox("唱歌");
        f.add(cbSing);
        JCheckBox cbDance = new JCheckBox("跳舞");
        f.add(cbDance);
        JCheckBox  cbSwing= new JCheckBox("游泳");
        f.add(cbSwing);

        JButton  buttonOK=new JButton("确定");
        f.add(buttonOK);
        JButton  buttonCancel=new JButton("取消");
        f.add(buttonCancel);


/*        gbc.gridy=3;//行3
        gbc.gridx=2;//列2
*//*        gbc.gridwidth=1;//占1列*//*
        gridBag.addLayoutComponent(labelUser, gbc); // 内部使用的仅是 gbc 的副本*/
        addComponent(gridBag,gbc,labelUser,3,2,1);



/*        gbc.gridy=3;//行3
        gbc.gridx=3;//列3
        gbc.gridwidth=3;//占3列
        gridBag.addLayoutComponent(textUser, gbc); // 内部使用的仅是 gbc 的副本*/
        addComponent(gridBag,gbc,textUser,3,3,3);

/*        gbc.gridy=4;//行3
        gbc.gridx=2;//列2
        gbc.gridwidth=1;//占3列
        gridBag.addLayoutComponent(labelPWD, gbc); // 内部使用的仅是 gbc 的副本*/
        addComponent(gridBag,gbc,labelPWD,4,2,1);

/*        gbc.gridy=4;//行3
        gbc.gridx=3;//列3
        gbc.gridwidth=3;//占3列
        gridBag.addLayoutComponent(textPwd, gbc); // 内部使用的仅是 gbc 的副本*/
        addComponent(gridBag,gbc,textPwd,4,3,3);

/*        gbc.gridy=5;//行5
        gbc.gridx=2;//列2
        gbc.gridwidth=1;//占1列
        gridBag.addLayoutComponent(labelSexy, gbc); // 内部使用的仅是 gbc 的副本*/
        addComponent(gridBag,gbc,labelSexy,5,2,1);

/*        gbc.gridy=5;//行5
        gbc.gridx=3;//列3
        gbc.gridwidth=3;//占3列
        gridBag.addLayoutComponent(comboBoxSexy, gbc); // 内部使用的仅是 gbc 的副本*/
        addComponent(gridBag,gbc,comboBoxSexy,5,3,3);

/*        gbc.gridy=6;//行6
        gbc.gridx=2;//列2
        gbc.gridwidth=1;//占1列
        gridBag.addLayoutComponent(labelRole, gbc); // 内部使用的仅是 gbc 的副本*/
        addComponent(gridBag,gbc,labelRole,6,2,1);

/*        gbc.gridy=6;//行6
        gbc.gridx=3;//列3
        gbc.gridwidth=1;//占1列
        gridBag.addLayoutComponent(rBtnT, gbc); // 内部使用的仅是 gbc 的副本*/
        addComponent(gridBag,gbc,rBtnT,6,3,1);

/*        gbc.gridy=6;//行6
        gbc.gridx=4;//列4
        gbc.gridwidth=1;//占1列
        gridBag.addLayoutComponent(rBtnS, gbc); // 内部使用的仅是 gbc 的副本*/
        addComponent(gridBag,gbc,rBtnS,6,4,1);
/*
        gbc.gridy=7;//行7
        gbc.gridx=2;//列2
        gbc.gridwidth=1;//占1列
        gridBag.addLayoutComponent(labelInterest, gbc); // 内部使用的仅是 gbc 的副本*/
        addComponent(gridBag,gbc,labelInterest,7,2,1);

/*        gbc.gridy=7;//行7
        gbc.gridx=3;//列3
        gbc.gridwidth=1;//占1列
        gridBag.addLayoutComponent(cbSing, gbc); // 内部使用的仅是 gbc 的副本*/
        addComponent(gridBag,gbc,cbSing,7,3,1);

/*        gbc.gridy=7;//行7
        gbc.gridx=4;//列4
        gbc.gridwidth=1;//占1列
        gridBag.addLayoutComponent(cbDance, gbc); // 内部使用的仅是 gbc 的副本*/
        addComponent(gridBag,gbc,cbDance,7,4,1);

      /*  gbc.gridy=7;//行7
        gbc.gridx=5;//列5
        gbc.gridwidth=1;//占1列
        gridBag.addLayoutComponent(cbSwing, gbc); // 内部使用的仅是 gbc 的副本*/
        addComponent(gridBag,gbc,cbSwing,7,5,1);

/*        gbc.gridy=8;//行8
        gbc.gridx=3;//列3
        gbc.gridwidth=1;//占1列
        gridBag.addLayoutComponent(buttonOK, gbc); // 内部使用的仅是 gbc 的副本*/
        addComponent(gridBag,gbc,buttonOK,8,3,1);

/*        gbc.gridy=8;//行8
        gbc.gridx=4;//列4
        gbc.gridwidth=1;//占1列
        gridBag.addLayoutComponent(buttonCancel, gbc); // 内部使用的仅是 gbc 的副本*/
        addComponent(gridBag,gbc,buttonCancel,8,4,1);

        //  f.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);//设置窗体行为：用户单击关闭按钮时，窗体啥都不干
         f.setVisible(true);//设置窗口为可见，默认不可见/**/

    }

    static void addComponent(GridBagLayout gridBag,
                             GridBagConstraints gbc,//约束
                             Component component, //组件，按钮，下拉框，文本，label
            int rowIndex,int colIndex,int cellNum)
    {
        gbc.gridy=rowIndex;//行8
        gbc.gridx=colIndex;//列4
        gbc.gridwidth=cellNum;//占1列
        gridBag.addLayoutComponent(component, gbc); // 内部使用的仅是 gbc 的副本
    }
}
